/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
  CCell, Table, TableBody, TableRow, Text, TableHead, BlobInputList, Button, Cell,
} from "customize-easy-ui-component";
import {InspectRecordLayout, InternalItemProps, RepLink, useItemInputControl} from "../../common/base";
import {useOmnipotentPrefMove, useOmnipotentPrefTitle} from "../../hook/useOmnipotentPref";
import {TailMenRowIspCheck,} from "../../contain/rarelyVary";
import {useMeasureInpFilter} from "../../common/hooks";
import {objNestSet,} from "../../../common/tool";
import {MemoDateInput} from "../../../comp/base";
import {useContext} from "react";
import UserContext from "../../../routing/UserContext";
import {css} from "@emotion/react";
import {tail注解} from "./Regular.O-1";

interface Props extends InternalItemProps {
  part?: number;
}
/**@param view: 是不是正式报告的，否则给编辑器用的
 * */
export const setConfig水质 =(orc:any,edit:boolean)=> [
  ['安许可', [{t:'（一）安装单位资源条件', s:3},], '1、锅炉安装许可证', 'A',],
  ['安人员证', [{}], '2、人员持证情况', 'C',],
  ['安条件', [{}], '3、锅炉安装相关的其他资源条件', 'C',],
  //['过蒸钠', [{t:'过热蒸汽', s:5}, {t: orc?.过蒸钠?.H??' ', s:5}], '钠离子(µg/kg)', '', ['≤5' , ]  ],
  ['出厂资', [{t:'（二）出厂资料和文件', s:6},], '1、锅炉出厂资料、制造监督检验证书', 'A',],
  ['移装手续', [{}], '2、移装锅炉手续', 'A',],
  ['仪表质证', [{}], '3、安全附件和仪表质量证明文件', 'C',],
  ['型试合证', [{}], '4、液（气）体燃料燃烧器型式试验合格证书', 'C',],
  ['热载报告', [{}], '5、有机热载体产品检验报告', 'C',],
  ['能效测报', [{}], '6、锅炉定型产品能效测试报告', 'A',],
  ['设计变资', [{t:'（三）设计文件、工艺文件', s:5}], '1、设计变更资料', 'C'],
  ['施组织', [{}], '2、安装施工组织设计', 'C'],
  ['焊接工艺', [{}], '3、焊接工艺评定资料、焊接工艺文件', 'C'],
  ['压试方案', [{}], '4、热处理工艺文件、检测工艺文件、水（耐）压试验方案', 'C'],
  ['调试文', [{}], '5、调试和试运行工艺文件', 'C'],
  ['基础沉记', [{t:'（四）锅炉基础', s:1}], '1、锅炉基础沉降定期观测记录', 'C'],
  ['钢螺栓', [{t:'（五）锅炉钢结构', s:3}], '1、锅炉钢结构质量证明文件、高强度螺栓复验资料以及安装记录', 'C'],
  ['钢无损检', [{}], '2、锅炉钢结构现场施焊记录、无损检测报告', 'C'],
  ['钢扰度测', [{}], '3、锅炉大板梁扰度测量记录、钢结构安装验收资料', 'C'],
  ['压元件', [{t:'（六）受压部件通用要求', s:10}], '1、受压元件及焊接材料质量证明文件及材料验收', 'C'],
  ['焊接材管', [{}], '2、受压元件及焊接材料的管理', 'B'],
  ['部件外观', [{}], '3、部件外观质量', 'B'],
  ['坡口加工', [{}], '4、现场坡口加工质量', 'B'],
  ['焊工艺执', [{}], '5、焊接工艺执行情况', 'B'],
  ['施焊记录', [{}], '6、施焊记录、热处理记录', 'C'],
  ['焊接头质', [{}], '7、安装焊接接头外观质量', 'B'],
  ['接头无损', [{}], '8、安装焊接接头无损检测报告', 'C'],
  ['头光谱分', [{}], '9、合金钢材质安装焊接接头化学成分光谱分析记录', 'C'],
  ['头金相', [{}], '10、高合金钢材质安装焊接接头金相检测报告', 'C'],
  ['清理就位', [{t:'（七）受压部件专项要求', s:6}], '1、内部装置现场安装、清理、就位记录', 'C'],
  ['预留膨胀', [{}], '2、支撑以及悬吊装置安装、支座预留膨胀间隙测量记录、膨胀指示器安装记录', 'C'],
  ['金头光谱', [{}], '3、金钢材质安装焊接接头化学成分光谱分析', 'B'],
  ['射线缺陷', [{}], '4、安装焊接接头射线底片的质量、缺陷评定或者数字式可记录超声检测记录、缺陷评定', 'C'],
  ['硬度检', [{}], '5、安装焊接接头热处理后的硬度检测记录', 'C'],
  ['高合金硬', [{}], '6、高合金钢材质安装焊接接头的硬度检测', 'B'],
  ['拼缝材', [{t:'（八）受热面及其附件', s:10}], '1、膜式壁拼缝用材料检查记录', 'C'],
  ['热面管', [{}], '2、受热面管的组合记录、安装记录', 'C'],
  ['管通球', [{}], '3、管子通球记录', 'C'],
  ['管排平整', [{}], '4、受热面管排平整度、管子间距', 'B'],
  ['胀接试', [{}], '5、胀接试验，胀接质量', 'B'],
  ['胀管记录', [{}], '6、胀管记录', 'C'],
  ['热面射线', [{}], '7、安装焊接接头射线底片的质量、缺陷评定或者数字式可记录超声检测记录、缺陷评定', 'C'],
  ['金头射线', [{}], '8、合金钢材质安装焊接接头射线检测', 'B'],
  ['热头光谱', [{}], '9、合金钢材质安装焊接接头化学成分光谱分析', 'B'],
  ['防磨装', [{}], '10、受热面防磨装置、定位管卡等安装位置和安装质量', 'B'],
  ['管道安装', [{t:'（九）锅炉范围内管道、主要连接管道', s:8}], '1、管道安装记录、支吊装置安装记录', 'C'],
  ['膨胀示器', [{}], '2、膨胀指示器安装记录及原始数据记录', 'C'],
  ['管射线', [{}], '3、射线底片的质量、缺陷评定或者数字式可记录超声检测记录、缺陷评定', 'C'],
  ['管无损', [{}], '4、A级锅炉安装焊接接头无损检测', 'B'],
  ['管光谱', [{}], '5、合金钢材质安装焊接接头化学成分光谱分析', 'B'],
  ['管硬度检', [{}], '6、安装焊接接头热处理后的硬度检测记录', 'C'],
  ['管金硬度', [{}], '7、高合金钢材质安装焊接接头的硬度检测', 'B'],
  ['排气管', [{}], '8、取样、疏（放）水和排气管道的安装布置', 'B'],
  ['射线抽查', [{t:'（十）无损检测抽查', s:1}], '射线抽查比例及结果', 'B'],
  ['吹灰坡度', [{t:'（十一）蒸汽吹灰系统', s:3}], '1、管道的安装、坡度设置', 'B'],
  ['阀校验', [{}], '2、安全阀的校验报告', 'C'],
  ['吹灰光谱', [{}], '3、合金钢部件化学成分光谱分析报告', 'C'],
  ['水压试条', [{t:'（十二）水（耐）压试验', s:7}], '1、水（耐）压试验条件', 'A'],
  ['水安防', [{}], '2、安全防护情况', 'A'],
  ['水质分析', [{}], '3、试验用水水质分析报告', 'A'],
  ['升压速', [{}], '4、抽查升（降）压速度', 'A'],
  ['试压保时', [{}], '5、试验压力保压时间', 'A'],
  ['密封状', [{}], '6、检查在工作压力下受压元件表面、焊缝、胀口、人孔、手孔、密封等处的状况', 'A'],
  ['泄压后', [{}], '7、泄压后的状况', 'A'],
  ['附件校准', [{t:'（十三）安全附件和仪表', s:6}], '1、安全阀校验报告、压力测量装置和温度测量装置的检定、校准证书', 'C'],
  ['附光谱', [{}], '2、合金钢管子、管件和焊接接头化学成分光谱分析记录', 'C'],
  ['附件热处', [{}], '3、安装焊接接头的热处理记录、无损检测记录或者报告', 'C'],
  ['阀排汽', [{}], '4、安全阀排汽管、疏水管的结构和走向', 'B'],
  ['水位测装', [{}], '5、水位测量装置的安装位置和数量', 'B'],
  ['低水位', [{}], <Text css={{fontSize:'0.875rem',fontWeight:edit? 800:undefined}}>6、高（低）水位报警装置、低水位联锁保护装置、超压报警及联锁保护装置、超温报警及联锁保护装置、点火程序控制和熄火保护等的功能试验记录</Text>, 'C'],
  ['炉膛门', [{t:'（十四）其他施工记录及验收记录', s:9}], '1、炉膛门、孔、密封部件以及防爆门的安装记录', 'C'],
  ['低温烘', [{}], '2、低温烘炉记录', 'C'],
  ['表热态测', [{}], '3、炉本体以及管道保温外防护层表面热态测温记录、施工质量验收记录', 'C'],
  ['水处理设', [{}], '4、锅炉水处理设备装置、安装调试和加药记录、水汽（介质）质量检验记录', 'B'],
  ['整套调', [{}], '5、锅炉整套启动调试报告', 'C'],
  ['煮炉记', [{}], '6、烘炉及煮炉（化学清洗）记录', 'C'],
  ['吹洗记', [{}], '7、管道冲洗和吹洗记录', 'C'],
  ['验收签', [{}], '8、整套启动试运行阶段锅炉相关验收签证', 'C'],
  ['环保要', [{}], '9、锅炉环保要求数据', 'C'],
  ['竣工资', [{t:'（十五）竣工资料', }], '1、锅炉安装竣工资料的完整性和有效性', 'C'],
  ['变更审', [{t:'（十六）设计变更以及发现问题的处理', s:3}], '1、施工过程中发现设计变更时的审批手续', 'C'],
  ['问题处理', [{}], '2、受检单位在发现不符合项时的处理情况', 'C'],
  ['检反馈', [{}], '3、监检人员提出问题的处理及反馈情况', 'C']
];

//设那些配置行(特殊处置前缀转化成了独立行做法)运行rowsCB回调。
const cbIdx=new Map();
[0,3,9,14,15,18,28,34,44,52,53,56,63,69,78,79].forEach(idx => {
    cbIdx.set(idx, undefined);
});
export const 检查结果选=['√','—','×'];
//字体不一样的：
const itemE检验项 =setConfig水质(undefined,true);
const item检验项 =setConfig水质(undefined,false);
const 记事选=['1、“检查结果”栏打*者具体情况请查阅分项检查报告。  \n' +
      '2、其他需要说明的问题。'
];
export const 查结果选=['符合', '不符合', '无此项'];
export const 工作见证选=['资料审查','现场巡查','资料审查、实物检查','现场见证'];
export const itemA检验项: string[] = ['记事'];
itemE检验项.forEach(([name, title, initIsp], i: number) => {
    itemA检验项.push(name as string);
});
//拆解5部分： 代码耦合；
const baseSeqA=[0,14,34,52,69];
const item检1=itemE检验项.slice(0,14);
const item检2=itemE检验项.slice(14,34);
const item检3=itemE检验项.slice(34,52);
const item检4=itemE检验项.slice(52,69);
const item检5=itemE检验项.slice(69);
export const InspectionItem =
    React.forwardRef((
        {children, show, alone = true, refWidth, label, part}: Props, ref
    ) => {
      const {user} = useContext(UserContext);
      const {inp, setInp} = useItemInputControl({ref});
      const [getInpFilter] = useMeasureInpFilter(null, itemA检验项,);
      const baseSeq= baseSeqA[part!-1];
      const config = part===1? item检1: part===2? item检2 : part===3? item检3 : part===4? item检4:item检5;
      const titNode=useOmnipotentPrefTitle({config, baseSeq});
      return (
          <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show}
                               alone={alone} label={label!}>
            <Text variant="h5">{label}：</Text>
            {config.map(([name, _1, _2, unit]: any, i: number) => {
              return (<React.Fragment key={i}>
                <div css={{display: 'flex', flexWrap: 'wrap', alignItems: 'center'}}>
                  {titNode[i]}&nbsp;
                  <div css={{display: 'inline-flex', alignItems: 'center', flexWrap: 'wrap'}}>
                    检查结果：
                    <BlobInputList value={inp?.[name]?.r || ''} datalist={检查结果选} rows={1}
                                   style={{display: 'inline-flex', width: '5rem', maxWidth: '100%', fontSize: '1rem',}}
                                   listStyle={css({fontSize: '1rem',})}
                                   onListChange={v => objNestSet(name, 'r', v || undefined, inp, setInp)}/>
                  </div>
                  <div css={{display: 'inline-flex', alignItems: 'center', flexWrap: 'wrap'}}>
                    工作见证：
                    <BlobInputList value={inp?.[name]?.z || ''} datalist={工作见证选} rows={1}
                                   style={{
                                     display: 'inline-flex', width: '12rem', maxWidth: '100%',
                                   }}
                                   onListChange={v => objNestSet(name, 'z', v || undefined, inp, setInp)}/>
                  </div>
                  <div css={{display: 'inline-flex', alignItems: 'center', flexWrap: 'wrap'}}>
                    确认日期
                    <MemoDateInput value={inp?.[name]?.d || ''}  width='9rem'
                                   onChange={v => objNestSet(name,'d', v||undefined,inp,setInp) } />
                  </div>
                  签字人：{inp?.[name]?.sgm?.name || ''}。<br/>
                  {inp?.[name]?.sgm?.username === user?.username ?
                      <Button intent="warning"
                              onPress={async () => {
                                    // await tableSetInp('单图表', dxtix, inp, setInp, 'sgm', undefined);
                                await objNestSet(name,'sgm', undefined, inp,setInp);
                              }}
                      >去除签名</Button>
                      :
                      <Button intent="warning"
                              onPress={async () => {
                                const me = {username: user?.username, name: user?.person?.name};
                                    // await tableSetInp('单图表', dxtix, inp, setInp, 'sgm', me);
                                await objNestSet(name,'sgm', me, inp,setInp);
                              }}
                      >签名</Button>
                  }
                </div>
              </React.Fragment>);
            })}
            <hr/>
            记事:
            <BlobInputList value={inp?.记事 || ''} rows={6} datalist={记事选}
                           onListChange={v => setInp({...inp, 记事: v || undefined}) } />
            {children}
            {tail注解}
          </InspectRecordLayout>
      );
  });

const tailRender = (orc: any, name: string, lix: number, unit: any) => {
  const nneedbig = orc?.[name]?.r?.length >= 3 || (!orc?.[name]?.r);
  return <>
    <CCell><Text css={{fontSize: nneedbig ? '0.875rem' : '1.15rem'}}>{orc?.[name]?.r ?? '／'}</Text></CCell>
    <CCell>{orc?.[name]?.z ?? '／'}</CCell>
    <CCell>{orc?.[name]?.sgm?.name ?? '／'}</CCell>
    <CCell>{orc?.[name]?.d ?? '／'}</CCell>
  </>;
}
/**需要特殊处理 【没办法】和tailRender一样返回打一个Node的做法，无法设置key; 只好改成返回数组模式。
* */
const rowsCB=(orc:any,name:string,index:number,item:any,xmcspan:number,unit:any,config:any[][])=>{
  const row1=<TableRow id={'XmbIspItms_'+index}>
        <CCell colSpan={xmcspan+6}>{config[index]?.[1][0]?.t}</CCell>
    </TableRow>;
  const row2=<TableRow>
      <CCell>{index+1}</CCell>
      <CCell colSpan={xmcspan}>{item}</CCell>
      <CCell>{unit??'／'}</CCell>
      {tailRender(orc,name,index,unit)}
    </TableRow>;
  return [[row1, row2], false] as [React.ReactNode[], boolean];
};
/**分5个编辑器
 * */
export const InspectionItemVw = ({orc, rep}: { orc: any, rep: any }
) => {
  const [rP1,rP2,rP3,rP4,rP5] = useOmnipotentPrefMove({orc,
      config: item检验项, split:[13,33,51,68], tag:'XmbIspItms', rowsCB,cbIdx,tailRender, pcols: 1, noNo: false, unitCel: true});
  return <>
    <div css={{"@media print": {paddingBottom: '8rem', pageBreakInside: 'avoid'}}}>
      <Text id='InspectionItem' variant="h2" css={{textAlign: 'center', marginTop: '1rem',
      }}>二、散装工业锅炉安装监督检验项目表</Text>
      <div css={{display: 'flex', justifyContent: 'space-between'}}>
        <Text>工程名称：{orc?.工程名称}</Text>
        <Text>报告编号：{rep.isp.no}</Text>
      </div>
    </div>
    <Table fixed={ ["3.6%", "%", "4%","7%", "18.1%","11%","12%"] }
              css={{borderCollapse: 'collapse', "@media print": {marginTop: '-8rem'}}} tight miniw={800}>
      <TableHead>
        <TableRow>
          <CCell><Text css={{fontSize: '0.75rem'}}>序号</Text></CCell><CCell>监检项目</CCell><CCell>类别</CCell>
          <CCell>检查结果</CCell><CCell>工作见证</CCell><CCell>监检员</CCell><CCell>确认日期</CCell>
        </TableRow>
      </TableHead>
      <TableBody>
        <RepLink rep={rep} tag={'InspectionItem'}>
          {rP1}
        </RepLink>
        <RepLink rep={rep} tag={'XmbIspItms_15'}>
          {rP2}
        </RepLink>
        <RepLink rep={rep} tag={'XmbIspItms_35'}>
          {rP3}
        </RepLink>
        <RepLink rep={rep} tag={'XmbIspItms_53'}>
          {rP4}
        </RepLink>
        <RepLink rep={rep} tag={'XmbIspItms_70'}>
          {rP5}
          <TableRow>
            <Cell colSpan={7}>
              <div css={{minHeight: '2rem', whiteSpace: 'pre-wrap'}}>
                记事：<br/>{orc?.记事 || '／'}
              </div>
            </Cell>
          </TableRow>
        </RepLink>
      </TableBody>
    </Table>
    <TailMenRowIspCheck  orc={orc} rep={rep} cap='监检' href={`/report/${rep?.modeltype}/ver/${rep?.modelversion}/${rep?.id}/ProjectList#ProjectList`}/>
    {tail注解}
  </>;
};
